import Taro from '@tarojs/taro'

const sizeCss = [
  'width', 'height',
  'padding', 'paddingBottom', 'paddingRight', 'paddingLeft', 'paddingTop',
  'margin', 'marginBottom', 'marginRight', 'marginLeft', 'marginTop',
  'borderRadius',
  'fontSize'
]
const borderCss = [
  'border', 'borderBottom', 'borderTop', 'borderLeft', 'bottomRight',
]
const isChinese = str => /[\u4E00-\u9FA5]/i.test(str)
const cachePx = {}
const getStyleVal = val => {
  if (cachePx[val]) return cachePx[val]
  const valType = typeof val
  if (valType === "number") {
    if (val === 0) return val
    return cachePx[val] = Taro.pxTransform(val)
  } else if (valType === "string") {
    return cachePx[val] = val.replace(/^[0-9]*px/, Taro.pxTransform(val))
  }
  return val
}

export function formatStyle (style) {
  const _style = {}
  for (let key in style) {
    const val = style[key]
    if (sizeCss.includes(key)) {
      _style[key] = getStyleVal(val)
    } else if (borderCss.includes(key)) {
      // if (!key.includes('-')) {
      //   _style[key] = getStyleVal(val)
      //   continue
      // }
      const [keyWidth, keyStyle, keyColor] = style[key].split(' ')
      Object.assign(_style, {
        [key + 'Width']: Taro.pxTransform(+keyWidth.replace('px', '')),
        [key + 'Style']: keyStyle,
        [key + 'Color']: keyColor,
      })
    } else {
      _style[key] = val
    }
  }
  return _style
}

/**
 * 更具对象转换成url参数字符串
 * @author luozhou
 * @DateTime 2019-10-09T09:22:56+0800
 * @param    {Object} obj [description]
 * @param    {string} [split = '&'] 参数拼接符，name=1&age=18
 */
export const parseParams = (obj, split = '&') => {
  let str = '?';
  Object.keys(obj).forEach((key) => {
    str += key + '=' + (isChinese(obj[key]) ? encodeURIComponent(obj[key]) : obj[key]) + split
  })
  return str.slice(0, -1) || '?';
}


export function timestampFormat (datetime) {
  if (typeof datetime !== 'object') {
    // 排除用户直接传入 new Date() 参数
    datetime = new Date(datetime)
  }
  // 数字补0
  const fillZero = (num, len = 2) => (`0${num}`).slice(-len)
  const ONE_MIN = 60000 // 一分钟
  const ONE_HOUR = 3600000 // 一小时
  const ONE_DAY = 86400000 // 一天
  // 当前时间日期对象
  const curDate = new Date()
  // 当前时间戳
  const curTimestamp = curDate.getTime()
  // 参数时间戳与当前时间戳相差秒数
  const timestampDiff = curTimestamp - (+datetime)
  // 参数时间戳转换成的日期对象
  const tmDate = datetime
  const Y = tmDate.getFullYear(), m = tmDate.getMonth() + 1, d = tmDate.getDate()
  const H = tmDate.getHours(), i = tmDate.getMinutes(), s = tmDate.getSeconds()
  // 一分钟以内
  if (timestampDiff < ONE_MIN) return "刚刚"
  // 一小时前之内
  if (timestampDiff < ONE_HOUR) return Math.floor(timestampDiff / ONE_MIN) + "分钟前"
  // 一个小时之后，今天之内
  if (curDate.getFullYear() === Y && curDate.getMonth() + 1 === m && curDate.getDate() === d) {
    return '今天 ' + fillZero(H) + ':' + fillZero(i)
  }
  // 参数中的时间戳加一天转换成的日期对象
  const newDate = new Date(curTimestamp - ONE_DAY)
  // 昨天
  if (newDate.getFullYear() === Y && newDate.getMonth() + 1 === m && newDate.getDate() === d) {
    return '昨天 ' + fillZero(H) + ':' + fillZero(i)
  }
  // 今年
  if (curDate.getFullYear() === Y) {
    return fillZero(m) + '月' + fillZero(d) + '日 ' + fillZero(H) + ':' + fillZero(i)
  }
  // 正常格式
  return Y + '年' + fillZero(m) + '月' + fillZero(d) + '日 ' + fillZero(H) + ':' + fillZero(i)
}
